# -*- coding: utf-8 -*-
"""
配置管理模块

此模块提供用于管理干湿急转分析工具集配置的函数和类。
主要功能包括：
- 管理数据路径
- 管理缓存设置
- 管理输出设置
"""

import os
import json
from pathlib import Path

# 项目根目录
ROOT_DIR = Path(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

# 数据目录
DATA_DIR = ROOT_DIR / 'data'
CACHE_DIR = DATA_DIR / 'cache'
OUTPUT_DIR = DATA_DIR / 'output'
PROVINCE_GRID_POINTS_DIR = DATA_DIR / 'province_grid_points'

# 确保目录存在
CACHE_DIR.mkdir(parents=True, exist_ok=True)
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
PROVINCE_GRID_POINTS_DIR.mkdir(parents=True, exist_ok=True)

# 默认配置
DEFAULT_CONFIG = {
    'era5_data_path': 'Daily_ERA5(1960-2024)',  # ERA5数据文件路径
    'province_shp_path': 'GS(2023)2767审图号/省面.shp',  # 省份边界GIS文件路径
    'use_cache': True,  # 是否使用缓存
    'cache_dir': str(CACHE_DIR),  # 缓存目录
    'output_dir': str(OUTPUT_DIR),  # 输出目录
    'province_grid_points_dir': str(PROVINCE_GRID_POINTS_DIR),  # 省份网格点数据目录
    'era5_variable': 'P',  # ERA5数据中要提取的默认变量名
}

# 配置文件路径
CONFIG_FILE = ROOT_DIR / 'config.json'


def load_config():
    """
    加载配置文件
    
    如果配置文件不存在，则创建默认配置文件
    
    返回:
        dict: 配置字典
    """
    if not CONFIG_FILE.exists():
        save_config(DEFAULT_CONFIG)
        return DEFAULT_CONFIG.copy()
    
    try:
        with open(CONFIG_FILE, 'r', encoding='utf-8') as f:
            config = json.load(f)
        return config
    except Exception as e:
        print(f"加载配置文件失败: {e}")
        return DEFAULT_CONFIG.copy()


def save_config(config):
    """
    保存配置到文件
    
    参数:
        config (dict): 配置字典
    """
    try:
        with open(CONFIG_FILE, 'w', encoding='utf-8') as f:
            json.dump(config, f, ensure_ascii=False, indent=4)
        print(f"配置已保存到: {CONFIG_FILE}")
    except Exception as e:
        print(f"保存配置文件失败: {e}")


def get_config(key, default=None):
    """
    获取配置项
    
    参数:
        key (str): 配置项键名
        default: 默认值
        
    返回:
        配置项的值
    """
    config = load_config()
    return config.get(key, default)


def set_config(key, value):
    """
    设置配置项
    
    参数:
        key (str): 配置项键名
        value: 配置项的值
    """
    config = load_config()
    config[key] = value
    save_config(config)


# 加载配置
config = load_config()